ea6d0333191d134a1ac27e6d2eaf2f6bf69cec34,app/src/main/java/home/smart/fly/animationdemo/property/ShopCarAddAnimActivity.java,ShopCarAddAnimActivity,addToCarAnimation,#ImageView#,58
Before Change
// 匀速线性�值器
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// 当æ?’值计算进行时,获å?–ä¸é—´çš„æ¯?个值,
// 这里这个值是ä¸é—´è¿‡ç¨‹ä¸çš„æ›²çº¿é•¿åº¦ï¼ˆä¸‹é?¢æ ¹æ?®è¿™ä¸ªå€¼æ?¥å¾—出ä¸é—´ç‚¹çš„å??æ ‡å€¼ï¼‰
float value = (Float) animation.getAnimatedValue();
// 获å?–当å‰?点å??æ ‡å°?装到mCurrentPosition
// boolean getPosTan(float distance, float[] pos, float[] tan) :
// ä¼ å…¥ä¸€ä¸ªè·?离distance(0<=distance<=getLength()),然å?Žä¼šè®¡ç®—当å‰?è·?离的å??æ ‡ç‚¹å’Œåˆ‡çº¿ï¼Œpos会自动填充上å??æ ‡ï¼Œè¿™ä¸ªæ–¹æ³•å¾ˆé‡?è¦?。
// mCurrentPositionæ¤æ—¶å°±æ˜¯ä¸é—´è·?离点的å??æ ‡å€¼
mPathMeasure.getPosTan(value, mCurrentPosition, null);
// 移动的商å“?图片(动画图片)的å??æ ‡è®¾ç½®ä¸ºè¯¥ä¸é—´ç‚¹çš„å??æ ‡
animImg.setTranslationX(mCurrentPosition[0]);
animImg.setTranslationY(mCurrentPosition[1]);
}
});
// 开始执行动画
valueAnimator.start();
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
goodsCount++;
carCount.setText(String.valueOf(goodsCount));
// 把执行动画的商å“?图片从父布局ä¸ç§»é™¤
shellLayout.removeView(animImg);
}
});
}
After Change
// 属性动画实现(从0到è´?塞尔曲线的长度之间进行æ?’值计算,获å?–ä¸é—´è¿‡ç¨‹çš„è·?离值)
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, mPathMeasure.getLength());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// 当æ?’值计算进行时,获å?–ä¸é—´çš„æ¯?个值,
// 这里这个值是ä¸é—´è¿‡ç¨‹ä¸çš„æ›²çº¿é•¿åº¦ï¼ˆä¸‹é?¢æ ¹æ?®è¿™ä¸ªå€¼æ?¥å¾—出ä¸é—´ç‚¹çš„å??æ ‡å€¼ï¼‰
float value = (Float) animation.getAnimatedValue();
// 获å?–当å‰?点å??æ ‡å°?装到mCurrentPosition
// boolean getPosTan(float distance, float[] pos, float[] tan) :
// ä¼ å…¥ä¸€ä¸ªè·?离distance(0<=distance<=getLength()),然å?Žä¼šè®¡ç®—当å‰?è·?离的å??æ ‡ç‚¹å’Œåˆ‡çº¿ï¼Œpos会自动填充上å??æ ‡ï¼Œè¿™ä¸ªæ–¹æ³•å¾ˆé‡?è¦?。
// mCurrentPositionæ¤æ—¶å°±æ˜¯ä¸é—´è·?离点的å??æ ‡å€¼
mPathMeasure.getPosTan(value, mCurrentPosition, null);
// 移动的商å“?图片(动画图片)的å??æ ‡è®¾ç½®ä¸ºè¯¥ä¸é—´ç‚¹çš„å??æ ‡
animImg.setTranslationX(mCurrentPosition[0]);
animImg.setTranslationY(mCurrentPosition[1]);
}
});
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
goodsCount++;
carCount.setText(String.valueOf(goodsCount));
// 把执行动画的商å“?图片从父布局ä¸ç§»é™¤
shellLayout.removeView(animImg);
}
});
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(1000);